Background

Exploratory analysis for a survival data. The outcome Variables are OS and Death. In this analysis, we wanna do four things:


Step 1 - Data preprocessing

library("readxl")
data_used <- read_excel(params$excel_path)

for (j in colnames(data_used)) {
  data_used[,j] <- as.numeric(as.matrix(data_used[,j]))
}
for (k in 1:length(colnames(data_used))){
  colnames(data_used)[k] <- gsub("-", "_", colnames(data_used)[k])
  colnames(data_used)[k] <- gsub("\\...", "col", colnames(data_used)[k])
}

Step 2 - Statistical descriptive analysis

2.1 summary information about outcome variables

Data Frame Summary

outcome_data

Dimensions: 99 x 2
Duplicates: 2
No Variable Stats / Values Freqs (% of Valid) Graph Missing
1 OS [numeric] Mean (sd) : 14.4 (8.4) min < med < max: 1.8 < 11.1 < 33 IQR (CV) : 13 (0.6) 97 distinct values 0 (0%)
2 Death [factor] 1. 0 2. 1
7(7.1%)
92(92.9%)
0 (0%)

Generated by summarytools 0.9.6 (R version 4.0.3)
2020-11-11

2.2 summary information about covariate

Data Frame Summary

covariates_data

Dimensions: 99 x 100
Duplicates: 0
No Variable Stats / Values Freqs (% of Valid) Graph Valid Missing
1 Recurrence [factor] 1. 0 2. 1
8(8.1%)
91(91.9%)
99 (100%) 0 (0%)
2 RFS [numeric] Mean (sd) : 4.9 (3.4) min < med < max: 1 < 3.9 < 19.2 IQR (CV) : 3.5 (0.7) 94 distinct values 99 (100%) 0 (0%)
3 Chemotherapy [factor] 1. 0 2. 1
50(50.5%)
49(49.5%)
99 (100%) 0 (0%)
4 Gender [factor] 1. 0 2. 1
32(32.3%)
67(67.7%)
99 (100%) 0 (0%)
5 Age [factor] 1. 0 2. 1
20(20.2%)
79(79.8%)
99 (100%) 0 (0%)
6 Symptom [factor] 1. 0 2. 1
16(16.2%)
83(83.8%)
99 (100%) 0 (0%)
7 BMI [factor] 1. 0 2. 1
34(34.3%)
65(65.7%)
99 (100%) 0 (0%)
8 Size [factor] 1. 0 2. 1
26(26.3%)
73(73.7%)
99 (100%) 0 (0%)
9 Lymphnode [factor] 1. 0 2. 1
59(59.6%)
40(40.4%)
99 (100%) 0 (0%)
10 TBIL [factor] 1. 0 2. 1
29(29.3%)
70(70.7%)
99 (100%) 0 (0%)
11 ALT [factor] 1. 0 2. 1
23(23.2%)
76(76.8%)
99 (100%) 0 (0%)
12 GGT [factor] 1. 0 2. 1
23(23.2%)
76(76.8%)
99 (100%) 0 (0%)
13 CA199 [factor] 1. 0 2. 1
37(37.4%)
62(62.6%)
99 (100%) 0 (0%)
14 CEA [factor] 1. 0 2. 1
34(34.3%)
65(65.7%)
99 (100%) 0 (0%)
15 Vascularinvasion [factor] 1. 0 2. 1
82(82.8%)
17(17.2%)
99 (100%) 0 (0%)
16 filter_$ [numeric] 1 distinct value
1:99(100.0%)
99 (100%) 0 (0%)
17 miR_1_rank [factor] 1. 0 2. 1
48(48.5%)
51(51.5%)
99 (100%) 0 (0%)
18 miR_1 [numeric] Mean (sd) : 4.3 (2.3) min < med < max: 0.4 < 4.8 < 8.8 IQR (CV) : 4.2 (0.5) 42 distinct values 99 (100%) 0 (0%)
19 miR_2_rank [factor] 1. 0 2. 1
57(57.6%)
42(42.4%)
99 (100%) 0 (0%)
20 miR_2 [numeric] Mean (sd) : 3.6 (2.4) min < med < max: 0.4 < 2.8 < 9.2 IQR (CV) : 3.9 (0.7) 42 distinct values 99 (100%) 0 (0%)
21 miR_3_rank [factor] 1. 0 2. 1
45(45.5%)
54(54.5%)
99 (100%) 0 (0%)
22 miR_3 [numeric] Mean (sd) : 4 (2.1) min < med < max: 0.4 < 4.4 < 8.6 IQR (CV) : 2.7 (0.5) 37 distinct values 99 (100%) 0 (0%)
23 miR_4_rank [factor] 1. 0 2. 1
54(54.5%)
45(45.5%)
99 (100%) 0 (0%)
24 miR_4 [numeric] Mean (sd) : 4 (2.2) min < med < max: 0.4 < 4 < 9.2 IQR (CV) : 3.1 (0.5) 38 distinct values 99 (100%) 0 (0%)
25 miR_5_rank [factor] 1. 0 2. 1
52(52.5%)
47(47.5%)
99 (100%) 0 (0%)
26 col28 [numeric] Mean (sd) : -4.2 (3.7) min < med < max: -11 < -3.4 < 1.4 IQR (CV) : 6.5 (-0.9) 51 distinct values 99 (100%) 0 (0%)
27 miR_5 [numeric] Mean (sd) : 0.8 (3.7) min < med < max: -6 < 1.6 < 6.4 IQR (CV) : 6.5 (4.8) 51 distinct values 99 (100%) 0 (0%)
28 miR_6_rank [factor] 1. 0 2. 1
52(52.5%)
47(47.5%)
99 (100%) 0 (0%)
29 miR_6 [numeric] Mean (sd) : 0.7 (3.5) min < med < max: -6.8 < 1.8 < 6.2 IQR (CV) : 6.4 (4.7) 45 distinct values 99 (100%) 0 (0%)
30 miR_7_rank [factor] 1. 0 2. 1
53(53.5%)
46(46.5%)
99 (100%) 0 (0%)
31 miR_7 [numeric] Mean (sd) : 3.5 (2.5) min < med < max: -0.9 < 3.7 < 8 IQR (CV) : 4 (0.7) 99 distinct values 99 (100%) 0 (0%)
32 miR_8_rank [factor] 1. 0 2. 1
43(43.4%)
56(56.6%)
99 (100%) 0 (0%)
33 miR_8 [numeric] Mean (sd) : 3.9 (2.5) min < med < max: -0.7 < 4 < 8.3 IQR (CV) : 3.7 (0.6) 99 distinct values 99 (100%) 0 (0%)
34 miR_9_rank [factor] 1. 0 2. 1
57(57.6%)
42(42.4%)
99 (100%) 0 (0%)
35 col37 [numeric] Mean (sd) : -1 (2.3) min < med < max: -4.7 < -1.4 < 3.8 IQR (CV) : 3.7 (-2.4) 99 distinct values 99 (100%) 0 (0%)
36 miR_9 [numeric] Mean (sd) : 4 (2.3) min < med < max: 0.3 < 3.6 < 8.8 IQR (CV) : 3.7 (0.6) 99 distinct values 99 (100%) 0 (0%)
37 miR_10_rank [factor] 1. 0 2. 1
46(46.5%)
53(53.5%)
99 (100%) 0 (0%)
38 miR_10 [numeric] Mean (sd) : -4 (2) min < med < max: -7.7 < -3.9 < -1 IQR (CV) : 3.2 (-0.5) 99 distinct values 99 (100%) 0 (0%)
39 miR_11_rank [factor] 1. 0 2. 1
51(51.5%)
48(48.5%)
99 (100%) 0 (0%)
40 miR_11 [numeric] Mean (sd) : 3.2 (2.2) min < med < max: -0.8 < 3.1 < 7 IQR (CV) : 3.6 (0.7) 99 distinct values 99 (100%) 0 (0%)
41 miR_12_rank [factor] 1. 0 2. 1
50(50.5%)
49(49.5%)
99 (100%) 0 (0%)
42 miR_12 [numeric] Mean (sd) : 4.4 (2.1) min < med < max: 0.9 < 4.4 < 7.7 IQR (CV) : 3.6 (0.5) 99 distinct values 99 (100%) 0 (0%)
43 miR_13_rank [factor] 1. 0 2. 1
51(51.5%)
48(48.5%)
99 (100%) 0 (0%)
44 miR_13 [numeric] Mean (sd) : 2.8 (2.9) min < med < max: -2.2 < 2.2 < 7.7 IQR (CV) : 5.2 (1) 99 distinct values 99 (100%) 0 (0%)
45 miR_14_rank [factor] 1. 0 2. 1
54(54.5%)
45(45.5%)
99 (100%) 0 (0%)
46 miR_14 [numeric] Mean (sd) : 4 (2.5) min < med < max: -0.5 < 4 < 8.4 IQR (CV) : 4 (0.6) 99 distinct values 99 (100%) 0 (0%)
47 miR_15_rank [factor] 1. 0 2. 1
51(51.5%)
48(48.5%)
99 (100%) 0 (0%)
48 miR_15 [numeric] Mean (sd) : 4.1 (2.4) min < med < max: 0.4 < 4.2 < 7.7 IQR (CV) : 4.4 (0.6) 99 distinct values 99 (100%) 0 (0%)
49 miR_16_rank [factor] 1. 0 2. 1
52(52.5%)
47(47.5%)
99 (100%) 0 (0%)
50 miR_16 [numeric] Mean (sd) : 3.6 (2.9) min < med < max: -1 < 3.7 < 8.8 IQR (CV) : 4.8 (0.8) 99 distinct values 99 (100%) 0 (0%)
51 miR_17_rank [factor] 1. 0 2. 1
50(50.5%)
49(49.5%)
99 (100%) 0 (0%)
52 miR_17 [numeric] Mean (sd) : 4.7 (2.2) min < med < max: 0.8 < 4.8 < 8 IQR (CV) : 3.6 (0.5) 99 distinct values 99 (100%) 0 (0%)
53 miR_18_rank [factor] 1. 0 2. 1
51(51.5%)
48(48.5%)
99 (100%) 0 (0%)
54 miR_18 [numeric] Mean (sd) : 3 (2.8) min < med < max: -1.6 < 2.4 < 8 IQR (CV) : 4.6 (0.9) 99 distinct values 99 (100%) 0 (0%)
55 miR_19_rank [factor] 1. 0 2. 1
51(51.5%)
48(48.5%)
99 (100%) 0 (0%)
56 miR_19 [numeric] Mean (sd) : 3.4 (2.8) min < med < max: -1.6 < 3.2 < 8.8 IQR (CV) : 4.3 (0.8) 99 distinct values 99 (100%) 0 (0%)
57 miR_20_rank [factor] 1. 0 2. 1
52(52.5%)
47(47.5%)
99 (100%) 0 (0%)
58 miR_20 [numeric] Mean (sd) : 2.4 (3.2) min < med < max: -2.9 < 2.1 < 7.7 IQR (CV) : 5.2 (1.4) 99 distinct values 99 (100%) 0 (0%)
59 miR_21_rank [factor] 1. 0 2. 1
45(45.5%)
54(54.5%)
99 (100%) 0 (0%)
60 miR_21 [numeric] Mean (sd) : 2.4 (3.2) min < med < max: -3.6 < 2.6 < 7.2 IQR (CV) : 5.4 (1.3) 99 distinct values 99 (100%) 0 (0%)
61 miR_22_rank [factor] 1. 0 2. 1
45(45.5%)
54(54.5%)
99 (100%) 0 (0%)
62 miR_22 [numeric] Mean (sd) : 2 (2.3) min < med < max: -2.4 < 2.4 < 5.3 IQR (CV) : 4.1 (1.2) 99 distinct values 99 (100%) 0 (0%)
63 miR_23_rank [factor] 1. 0 2. 1
46(46.5%)
53(53.5%)
99 (100%) 0 (0%)
64 miR_23 [numeric] Mean (sd) : -1.8 (3.3) min < med < max: -7.6 < -1.2 < 3.2 IQR (CV) : 5.5 (-1.8) 99 distinct values 99 (100%) 0 (0%)
65 miR_24_rank [factor] 1. 0 2. 1
55(55.6%)
44(44.4%)
99 (100%) 0 (0%)
66 miR_24 [numeric] Mean (sd) : -2.7 (3.2) min < med < max: -7.9 < -3.2 < 3.5 IQR (CV) : 5.1 (-1.2) 99 distinct values 99 (100%) 0 (0%)
67 miR_25_rank [factor] 1. 0 2. 1
54(54.5%)
45(45.5%)
99 (100%) 0 (0%)
68 miR_25 [numeric] Mean (sd) : 2.4 (3.3) min < med < max: -3.5 < 1.7 < 8.7 IQR (CV) : 4.8 (1.4) 99 distinct values 99 (100%) 0 (0%)
69 miR_26_rank [factor] 1. 0 2. 1
46(46.5%)
53(53.5%)
99 (100%) 0 (0%)
70 miR_26 [numeric] Mean (sd) : 1.3 (4.2) min < med < max: -6.5 < 2.2 < 7.6 IQR (CV) : 7.3 (3.2) 99 distinct values 99 (100%) 0 (0%)
71 miR_27_rank [factor] 1. 0 2. 1
48(48.5%)
51(51.5%)
99 (100%) 0 (0%)
72 col74 [numeric] Mean (sd) : 3.5 (3) min < med < max: -1.6 < 3.7 < 8.8 IQR (CV) : 5.2 (0.9) 99 distinct values 99 (100%) 0 (0%)
73 miR_27 [numeric] Mean (sd) : -0.5 (3) min < med < max: -5.6 < -0.3 < 4.8 IQR (CV) : 5.2 (-6.2) 99 distinct values 99 (100%) 0 (0%)
74 miR_28_rank [factor] 1. 0 2. 1
50(50.5%)
49(49.5%)
99 (100%) 0 (0%)
75 miR_28 [numeric] Mean (sd) : -0.2 (3.3) min < med < max: -5.9 < -0.3 < 5.7 IQR (CV) : 5.6 (-17.1) 99 distinct values 99 (100%) 0 (0%)
76 miR_29_rank [factor] 1. 0 2. 1
49(49.5%)
50(50.5%)
99 (100%) 0 (0%)
77 miR_29 [numeric] Mean (sd) : 1.7 (4.1) min < med < max: -4.7 < 1.8 < 8 IQR (CV) : 7.3 (2.3) 99 distinct values 99 (100%) 0 (0%)
78 miR_30_rank [factor] 1. 0 2. 1
50(50.5%)
49(49.5%)
99 (100%) 0 (0%)
79 miR_30 [numeric] Mean (sd) : -0.9 (2.5) min < med < max: -5.3 < -1 < 3.4 IQR (CV) : 4.3 (-2.7) 99 distinct values 99 (100%) 0 (0%)
80 miR_31_rank [factor] 1. 0 2. 1
50(50.5%)
49(49.5%)
99 (100%) 0 (0%)
81 miR_31 [numeric] Mean (sd) : 2.6 (2.9) min < med < max: -2.5 < 2.4 < 7.3 IQR (CV) : 4.8 (1.1) 99 distinct values 99 (100%) 0 (0%)
82 miR_32_rank [factor] 1. 0 2. 1
43(43.4%)
56(56.6%)
99 (100%) 0 (0%)
83 miR_32 [numeric] Mean (sd) : -2.3 (3.5) min < med < max: -8.3 < -1.8 < 3.3 IQR (CV) : 6.7 (-1.5) 99 distinct values 99 (100%) 0 (0%)
84 miR_33_rank [factor] 1. 0 2. 1
52(52.5%)
47(47.5%)
99 (100%) 0 (0%)
85 miR_33 [numeric] Mean (sd) : -0.5 (2.3) min < med < max: -4.5 < -0.6 < 3.6 IQR (CV) : 3.8 (-4.2) 99 distinct values 99 (100%) 0 (0%)
86 miR_34_rank [factor] 1. 0 2. 1
47(47.5%)
52(52.5%)
99 (100%) 0 (0%)
87 miR_34 [numeric] Mean (sd) : -2 (3) min < med < max: -7.5 < -2 < 3.7 IQR (CV) : 4.8 (-1.5) 99 distinct values 99 (100%) 0 (0%)
88 miR_35_rank [factor] 1. 0 2. 1
50(50.5%)
49(49.5%)
99 (100%) 0 (0%)
89 miR_35 [numeric] Mean (sd) : -1 (3.6) min < med < max: -6.4 < -0.7 < 4.8 IQR (CV) : 6.6 (-3.8) 99 distinct values 99 (100%) 0 (0%)
90 miR_36_rank [factor] 1. 0 2. 1
56(56.6%)
43(43.4%)
99 (100%) 0 (0%)
91 miR_36 [numeric] Mean (sd) : -0.8 (3) min < med < max: -5.6 < -1.1 < 4.8 IQR (CV) : 5.3 (-4) 99 distinct values 99 (100%) 0 (0%)
92 miR_37_rank [factor] 1. 0 2. 1
49(49.5%)
50(50.5%)
99 (100%) 0 (0%)
93 miR_37 [numeric] Mean (sd) : -2.3 (3.7) min < med < max: -8.5 < -3 < 4.8 IQR (CV) : 6.3 (-1.6) 99 distinct values 99 (100%) 0 (0%)
94 miR_38_rank [factor] 1. 0 2. 1
55(55.6%)
44(44.4%)
99 (100%) 0 (0%)
95 miR_38 [numeric] Mean (sd) : -1.3 (2.8) min < med < max: -5.6 < -1.7 < 3.7 IQR (CV) : 4.7 (-2.3) 99 distinct values 99 (100%) 0 (0%)
96 miR_39_rank [factor] 1. 0 2. 1
55(55.6%)
44(44.4%)
99 (100%) 0 (0%)
97 miR_39 [numeric] Mean (sd) : -1.3 (3.4) min < med < max: -6.5 < -1.5 < 4.4 IQR (CV) : 5.9 (-2.7) 99 distinct values 99 (100%) 0 (0%)
98 miR_40_rank [factor] 1. 0 2. 1
51(51.5%)
48(48.5%)
99 (100%) 0 (0%)
99 col101 [numeric] Mean (sd) : 4.3 (2.5) min < med < max: 0.6 < 4 < 8.7 IQR (CV) : 4.5 (0.6) 99 distinct values 99 (100%) 0 (0%)
100 miR_40 [numeric] Mean (sd) : -0.7 (2.5) min < med < max: -4.4 < -1 < 3.7 IQR (CV) : 4.5 (-3.7) 99 distinct values 99 (100%) 0 (0%)

Generated by summarytools 0.9.6 (R version 4.0.3)
2020-11-11

2.3 The distribution of continus variables

2.4 The box plot of continus variables

2.5 The correlation heatmap plot of continus variables

2.6 The bar plot of cateogorical variables

Step 3 - Univariable analysis

3.1 Results of Univariable analysis for OS and Death

3.2 Significant variable in univariate analysis

 [1] "RFS"          "miR_1"        "miR_2"        "miR_3"        "miR_4"       
 [6] "col28"        "miR_5"        "miR_6"        "miR_24"       "miR_28"      
[11] "Chemotherapy" "Age"          "Lymphnode"    "TBIL"         "ALT"         
[16] "CEA"          "miR_1_rank"   "miR_2_rank"   "miR_3_rank"   "miR_6_rank"  
[21] "miR_24_rank" 

3.3 KM plot for categorical variables

3.4 box plot for continus variables

Step 4 - Mutivariable analysis

4.1 Stepwise for model selection when containing all significant variables in univiate analysis.

Call:
coxph(formula = Surv(OS, Death) ~ RFS + col28 + miR_6 + miR_28 + 
    Chemotherapy + Lymphnode + CEA, data = data_frame)

                  coef exp(coef) se(coef)      z        p
RFS           -0.89899   0.40698  0.12867 -6.987 2.82e-12
col28         -0.10500   0.90032  0.03628 -2.895 0.003797
miR_6         -0.21194   0.80901  0.04207 -5.038 4.71e-07
miR_28        -0.05771   0.94393  0.03713 -1.554 0.120192
Chemotherapy1  0.44283   1.55710  0.26161  1.693 0.090518
Lymphnode1     0.44097   1.55421  0.23912  1.844 0.065163
CEA1          -0.96779   0.37992  0.26365 -3.671 0.000242

Likelihood ratio test=170.3  on 7 df, p=< 2.2e-16
n= 99, number of events= 92 

4.2 LASSO

4.2.1 Variables selected by Lasso Cox using C-index metrics

 [1] "RFS"         "miR_1"       "col28"       "miR_5"       "miR_6"      
 [6] "miR_10"      "miR_11"      "miR_12"      "miR_13"      "miR_14"     
[11] "miR_15"      "miR_17"      "miR_18"      "miR_19"      "miR_28"     
[16] "miR_31"      "miR_33"      "miR_36"      "miR_37"      "col101"     
[21] "miR_40"      "Recurrence"  "Gender"      "Size"        "Lymphnode"  
[26] "GGT"         "CEA"         "miR_8_rank"  "miR_15_rank" "miR_20_rank"
[31] "miR_22_rank" "miR_23_rank" "miR_34_rank" "miR_35_rank" "miR_38_rank"
[36] "miR_39_rank"

4.2.2 Coefficient of Lasso Cox in optimal lambda

99 x 1 sparse Matrix of class "dgCMatrix"
                             1
RFS              -6.900427e-01
miR_1             1.017145e-02
miR_2             .           
miR_3             .           
miR_4             .           
col28            -7.373156e-02
miR_5            -5.849148e-17
miR_6            -2.361290e-01
miR_7             .           
miR_8             .           
col37             .           
miR_9             .           
miR_10           -1.367586e-02
miR_11           -7.218946e-03
miR_12           -1.554560e-02
miR_13            8.930393e-03
miR_14            7.257140e-04
miR_15            5.386218e-03
miR_16            .           
miR_17           -8.331654e-02
miR_18           -4.054314e-02
miR_19           -8.102817e-02
miR_20            .           
miR_21            .           
miR_22            .           
miR_23            .           
miR_24            .           
miR_25            .           
miR_26            .           
col74             .           
miR_27            .           
miR_28           -5.725081e-02
miR_29            .           
miR_30            .           
miR_31           -6.345782e-02
miR_32            .           
miR_33           -1.504876e-02
miR_34            .           
miR_35            .           
miR_36            6.305918e-02
miR_37            3.151431e-02
miR_38            .           
miR_39            .           
col101            2.815717e-03
miR_40            7.174788e-16
Recurrence       -1.117257e+00
Chemotherapy      .           
Gender            2.041213e-01
Age               .           
Symptom           .           
BMI               .           
Size              1.801825e-01
Lymphnode         1.785151e-01
TBIL              .           
ALT               .           
GGT              -1.318687e-01
CA199             .           
CEA              -7.631035e-01
Vascularinvasion  .           
miR_1_rank        .           
miR_2_rank        .           
miR_3_rank        .           
miR_4_rank        .           
miR_5_rank        .           
miR_6_rank        .           
miR_7_rank        .           
miR_8_rank       -3.303187e-02
miR_9_rank        .           
miR_10_rank       .           
miR_11_rank       .           
miR_12_rank       .           
miR_13_rank       .           
miR_14_rank       .           
miR_15_rank       4.386973e-03
miR_16_rank       .           
miR_17_rank       .           
miR_18_rank       .           
miR_19_rank       .           
miR_20_rank       2.811178e-03
miR_21_rank       .           
miR_22_rank       1.001493e-01
miR_23_rank      -3.764196e-01
miR_24_rank       .           
miR_25_rank       .           
miR_26_rank       .           
miR_27_rank       .           
miR_28_rank       .           
miR_29_rank       .           
miR_30_rank       .           
miR_31_rank       .           
miR_32_rank       .           
miR_33_rank       .           
miR_34_rank       1.052107e-01
miR_35_rank       1.150351e-02
miR_36_rank       .           
miR_37_rank       .           
miR_38_rank       3.635169e-01
miR_39_rank       6.389360e-02
miR_40_rank       .           

4.2.3 Coefficient change as L1 norm in Lasso Cox

4.2.4 Change of C-index

LS0tCnRpdGxlOiAiRXhwbG9yYXRvcnkgQW5hbHlzaXMgdG8gU3Vydml2YWwgZGF0YSIKYXV0aG9yOiAiV2VuanVuIEhlIgpkYXRlOiAiYHIgZm9ybWF0KFN5cy5EYXRlKCksJyVkICVCLCAlWScpYCIKcGFyYW1zOgogIGV4Y2VsX3BhdGg6ICIvaGV3ZW5qdW4vcnN0dWRpb193b3JrL1NoYXJpbmdhbi9leGFtcGxlcy9zdXJ2aXZhbF9leGFtcGxlL2V4YW1wbGVfc3Vydml2YWxfZGF0YS54bHN4IgogIG91dGNvbWVfdmFyX1RpbWU6ICJPUyIKICBvdXRjb21lX3Zhcl9TdGF0dXM6ICJEZWF0aCIKICAKb3V0cHV0OgogIGh0bWxfbm90ZWJvb2s6CiAgICB0b2M6IHllcwotLS0KCiMgQmFja2dyb3VuZAoKRXhwbG9yYXRvcnkgYW5hbHlzaXMgZm9yIGEgc3Vydml2YWwgZGF0YS4gVGhlIG91dGNvbWUgVmFyaWFibGVzIGFyZSBgciBwYXJhbXMkb3V0Y29tZV92YXJfVGltZWAgYW5kIGByIHBhcmFtcyRvdXRjb21lX3Zhcl9TdGF0dXNgLiBJbiB0aGlzIGFuYWx5c2lzLCB3ZSB3YW5uYSBkbyBmb3VyIHRoaW5nczoKCi0gRGF0YSBwcmVwcm9jZXNzaW5nCi0gU3RhdGlzdGljYWwgZGVzY3JpcHRpdmUgYW5hbHlzaXMKLSBVbml2YXJpYWJsZSBhbmFseXNpcwotIE11dGl2YXJpYWJsZSBhbmFseXNpcyBpbmNsdWRpbmcgTEFTU08KCjxicj4KCiMgU3RlcCAxIC0gRGF0YSBwcmVwcm9jZXNzaW5nCgpgYGB7cixlY2hvPVRSVUUsIHdhcm5pbmc9RkFMU0UsIG1lc3NhZ2U9RkFMU0V9CmxpYnJhcnkoInJlYWR4bCIpCmRhdGFfdXNlZCA8LSByZWFkX2V4Y2VsKHBhcmFtcyRleGNlbF9wYXRoKQoKZm9yIChqIGluIGNvbG5hbWVzKGRhdGFfdXNlZCkpIHsKICBkYXRhX3VzZWRbLGpdIDwtIGFzLm51bWVyaWMoYXMubWF0cml4KGRhdGFfdXNlZFssal0pKQp9CmZvciAoayBpbiAxOmxlbmd0aChjb2xuYW1lcyhkYXRhX3VzZWQpKSl7CiAgY29sbmFtZXMoZGF0YV91c2VkKVtrXSA8LSBnc3ViKCItIiwgIl8iLCBjb2xuYW1lcyhkYXRhX3VzZWQpW2tdKQogIGNvbG5hbWVzKGRhdGFfdXNlZClba10gPC0gZ3N1YigiXFwuLi4iLCAiY29sIiwgY29sbmFtZXMoZGF0YV91c2VkKVtrXSkKfQpgYGAKCiMgU3RlcCAyIC0gU3RhdGlzdGljYWwgZGVzY3JpcHRpdmUgYW5hbHlzaXMKYGBge3IsZWNobz1GQUxTRSwgd2FybmluZz1GQUxTRSwgbWVzc2FnZT1GQUxTRX0Kc291cmNlKCIvaGV3ZW5qdW4vcnN0dWRpb193b3JrL1NoYXJpbmdhbi9TdXJ2aXZhbEFuYWx5c2lzL3N1cnZfZGVzY3JpYmUuUiIpCmBgYAoKYGBge3IsZWNobz1GQUxTRSwgd2FybmluZz1GQUxTRSwgbWVzc2FnZT1GQUxTRX0KbGlicmFyeShjb3dwbG90KQpsaWJyYXJ5KHJlc2hhcGUyKQpsaWJyYXJ5KHBoZWF0bWFwKQpvdXRjb21lX3ZhciA8LSBjKHBhcmFtcyRvdXRjb21lX3Zhcl9UaW1lLHBhcmFtcyRvdXRjb21lX3Zhcl9TdGF0dXMpCnN1cnZfZGVzY3JpYmVfcmVzIDwtIHN1cnZfZGVzY3JpYmUoZGF0YV9mcmFtZSA9IGRhdGFfdXNlZCwgb3V0Y29tZV92YXIgPSBvdXRjb21lX3ZhcikKYGBgCgojIyAyLjEgc3VtbWFyeSBpbmZvcm1hdGlvbiBhYm91dCBvdXRjb21lIHZhcmlhYmxlcwpgYGB7cixlY2hvPUZBTFNFLCB3YXJuaW5nPUZBTFNFLCBtZXNzYWdlPUZBTFNFfQpwcmludChzdXJ2X2Rlc2NyaWJlX3Jlc1tbMl1dLCBtYXgudGJsLmhlaWdodCA9IDMwMCwgbWV0aG9kID0gInJlbmRlciIpCmBgYAojIyAyLjIgc3VtbWFyeSBpbmZvcm1hdGlvbiBhYm91dCBjb3ZhcmlhdGUKYGBge3IsZWNobz1GQUxTRSwgd2FybmluZz1GQUxTRSwgbWVzc2FnZT1GQUxTRX0KcHJpbnQoc3Vydl9kZXNjcmliZV9yZXNbWzNdXSwgbWF4LnRibC5oZWlnaHQgPSAzMDAsIG1ldGhvZCA9ICJyZW5kZXIiKQpgYGAKIyMgMi4zIFRoZSBkaXN0cmlidXRpb24gb2YgY29udGludXMgdmFyaWFibGVzCiFbXShgciBwYXJhbXMkb3V0Y29tZV92YXJfU3RhdHVzYF9jb250aW51c192YXJpYWJsZV9kaXN0cmlidXRpb24uanBnKQoKIyMgMi40IFRoZSBib3ggcGxvdCBvZiBjb250aW51cyB2YXJpYWJsZXMKIVtdKGByIHBhcmFtcyRvdXRjb21lX3Zhcl9TdGF0dXNgX2NvbnRpbnVzX3ZhcmlhYmxlX2JveHBsb3QuanBnKQoKIyMgMi41IFRoZSBjb3JyZWxhdGlvbiBoZWF0bWFwIHBsb3Qgb2YgY29udGludXMgdmFyaWFibGVzCiFbXShgciBwYXJhbXMkb3V0Y29tZV92YXJfU3RhdHVzYF9jb3JyZWxhdGlvbl9tYXAuanBnKQoKIyMgMi42IFRoZSBiYXIgcGxvdCBvZiBjYXRlb2dvcmljYWwgdmFyaWFibGVzCiFbXShgciBwYXJhbXMkb3V0Y29tZV92YXJfU3RhdHVzYF9jYXRlZ29yaWNhbF92YXJpYWJsZV9iYXJwbG90LmpwZykKCiMgU3RlcCAzIC0gVW5pdmFyaWFibGUgYW5hbHlzaXMKIyMgMy4xIFJlc3VsdHMgb2YgVW5pdmFyaWFibGUgYW5hbHlzaXMgZm9yIE9TIGFuZCBEZWF0aApgYGB7cixlY2hvPUZBTFNFLCB3YXJuaW5nPUZBTFNFLCBtZXNzYWdlPUZBTFNFfQpzb3VyY2UoIi9oZXdlbmp1bi9yc3R1ZGlvX3dvcmsvU2hhcmluZ2FuL1N1cnZpdmFsQW5hbHlzaXMvc3Vydl91bml2YXIuUiIpCnN1cnZfdW5pdmFyX3JlcyA8LSBzdXJ2X3VuaXZhcihzdXJ2X2Rlc2NyaWJlX3Jlc1tbMV1dLCBvdXRjb21lX3Zhciwgc3Vydl9kZXNjcmliZV9yZXNbWzRdXSxzdXJ2X2Rlc2NyaWJlX3Jlc1tbNV1dKQpzdXJ2X3VuaXZhcl9yZXNbWzFdXQpgYGAKIyMgMy4yIFNpZ25pZmljYW50IHZhcmlhYmxlIGluIHVuaXZhcmlhdGUgYW5hbHlzaXMKYGBge3IsZWNobz1GQUxTRSwgd2FybmluZz1GQUxTRSwgbWVzc2FnZT1GQUxTRX0KcHJpbnQoc3Vydl91bml2YXJfcmVzW1syXV0pCmBgYAojIyAzLjMgS00gcGxvdCBmb3IgY2F0ZWdvcmljYWwgdmFyaWFibGVzCiFbXShgciBwYXJhbXMkb3V0Y29tZV92YXJfU3RhdHVzYF9zdXJ2aXZhbF9LTS5qcGVnKQoKIyMgMy40IGJveCBwbG90IGZvciBjb250aW51cyB2YXJpYWJsZXMKIVtdKGByIHBhcmFtcyRvdXRjb21lX3Zhcl9TdGF0dXNgX3N1cnZpdmFsX2JveHBsb3QuanBlZykKCgojIFN0ZXAgNCAtIE11dGl2YXJpYWJsZSBhbmFseXNpcwojIyA0LjEgU3RlcHdpc2UgZm9yIG1vZGVsIHNlbGVjdGlvbiB3aGVuIGNvbnRhaW5pbmcgYWxsIHNpZ25pZmljYW50IHZhcmlhYmxlcyBpbiB1bml2aWF0ZSBhbmFseXNpcy4KYGBge3IsZWNobz1GQUxTRSwgd2FybmluZz1GQUxTRSwgbWVzc2FnZT1GQUxTRX0Kc291cmNlKCIvaGV3ZW5qdW4vcnN0dWRpb193b3JrL1NoYXJpbmdhbi9TdXJ2aXZhbEFuYWx5c2lzL3N1cnZfbXVsdGl2YXIuUiIpCnN1cnZfbXVsdGl2YXJfcmVzIDwtIHN1cnZfbXVsdGl2YXIoc3Vydl9kZXNjcmliZV9yZXNbWzFdXSwgb3V0Y29tZV92YXIsc3Vydl91bml2YXJfcmVzW1syXV0pCnN1cnZfbXVsdGl2YXJfcmVzW1sxXV0KYGBgCiMjIDQuMiBMQVNTTwojIyMgNC4yLjEgVmFyaWFibGVzIHNlbGVjdGVkIGJ5IExhc3NvIENveCB1c2luZyBDLWluZGV4IG1ldHJpY3MKYGBge3IsZWNobz1GQUxTRSwgd2FybmluZz1GQUxTRSwgbWVzc2FnZT1GQUxTRX0KcHJpbnQoc3Vydl9tdWx0aXZhcl9yZXNbWzJdXSkKYGBgCgojIyMgNC4yLjIgQ29lZmZpY2llbnQgb2YgTGFzc28gQ294IGluIG9wdGltYWwgbGFtYmRhCmBgYHtyLGVjaG89RkFMU0UsIHdhcm5pbmc9RkFMU0UsIG1lc3NhZ2U9RkFMU0V9CnN1cnZfbXVsdGl2YXJfcmVzW1szXV0KYGBgCiMjIyA0LjIuMyBDb2VmZmljaWVudCBjaGFuZ2UgYXMgTDEgbm9ybSBpbiBMYXNzbyBDb3gKIVtdKGByIHBhcmFtcyRvdXRjb21lX3Zhcl9TdGF0dXNgX2xhc3NvX2NvZWZmaWNpZW50X2NoYW5nZS5qcGVnKQoKIyMjIDQuMi40IENoYW5nZSBvZiBDLWluZGV4CiFbXShgciBwYXJhbXMkb3V0Y29tZV92YXJfU3RhdHVzYF9sYXNzb19jaGFuZ2Vfb2ZfQ19pbmRleC5qcGVnKQoK